﻿/**
 * @auther:Daniel
 * create on 2010年5月12日8:16:23
 */

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

/// <summary>
/// STUDENT_Operator 类 
/// Instruction:
///         用于对STU_INFO类 CLASS_INFO类进行从操作，其中CLASS_INFO类为STU_INFO类的辅助类
/// </summary>
public class STUDENT_Operator
{

    /// <summary>
    /// STUDENT_Operator()  [构造函数]
    /// </summary>
	public STUDENT_Operator()
	{
		//
		// TODO: 在此处添加构造函数逻辑
		//

	}

    /**
     *      【学分，学分绩计算】
     * 
　　 *   (一) 一门课程的学分绩 = 学分数×成绩分数
     * 
　　　　　　　　　　　　　　　　　　    所学课程学分绩之和
　　 *   (二) 学期或学年的平均学分绩 = ─────────────── 
　　　　　　　　　　　　　　　　　　    所学课程学分之和
　　 *   例如：某学生修6门课：
　　 *   其成绩分别为： 85 92 79 63 97 84
　　 v   学分数分别为： 5 6 4 1 3 2
　　 *   学分绩分别为： 425 552 316 63 291 168
　　　　　　　　　　　　    425+552+316+63+291+168
　　 *   该生平均学分绩 = ──────────────────────────── =86.43
　　　　　　　　　　　　　　　    5+6+4+1+3+2
     * 
     */

    /// <summary>
    /// Statistic_Credits_GradeCredits()    [统计学分 学分绩 函数1]
    /// Instruction：
    ///         统计某一学生所有学期的学分，学分绩（这里只记录平均学分绩，总的学分绩对学生没用）
    /// </summary>
    /// <param name="paraStudent_Datas">学生数据类对象</param>
    /// <returns>true/false</returns>
    public Boolean Statistic_Credits_GradeCredits(STUDENT_Datas paraStudent_Datas)
    {
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=CSDB";

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "SELECT SUM(credit),SUM(mark*credit) FROM CLASS_INFO,COURSE_INFO";
        cmd.CommandText += " ";                                                 // 这里要补充空格“ ”  
        cmd.CommandText += "WHERE CLASS_INFO.studentid = '" + paraStudent_Datas.sStudent_ID + "' AND CLASS_INFO.courseid = COURSE_INFO.id";
        cmd.Connection = conn;

        conn.Open();

        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        if (false == reader.Read())                                             // 不存在
        {
            
            return false;
        }

        //
        // 测试Select语句返回的值是否正确
        // (这里1.不能确定能否检测所得结果为0；2.不能处理挂科无学分情况)
        //
        if (true == reader.IsDBNull(0))                                         // 该值指示列中是否包含不存在的或已丢失的值
        {
            return false;
        }

        int nCredits        = Convert.ToInt32(reader.GetValue(0));                        // 得到学分之和
        int nGradeCredits   = Convert.ToInt32(reader.GetValue(1));                        // 得到学分绩之和

        conn.Close();

        paraStudent_Datas.nCredits = nCredits;                                  // 学分之和
        paraStudent_Datas.nGradeCredits_Average = (nGradeCredits)/(nCredits);   // 平均 学分绩

        return true;
    }

    /// <summary>
    /// Statistic_Credits_GradeCredits()    [统计学分 学分绩 函数2]
    /// Instruction：
    ///         统计某一学生某一学期的学分，学分绩（这里只记录平均学分绩，总的学分绩对学生没用）
    /// </summary>
    /// <param name="paraStudent_Datas">学生数据类对象</param>
    /// <param name="sSemester">用户指定的查询学期</param>
    /// <returns>true/false</returns>
    public Boolean Statistic_Credits_GradeCredits(STUDENT_Datas paraStudent_Datas, string sSemester)
    {
        if ((sSemester == "") || (sSemester == null))                           // 再次测试
        {
            return false;
        }

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=CSDB";

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "SELECT SUM(credit),SUM(mark*credit) FROM CLASS_INFO,COURSE_INFO";
        cmd.CommandText += " ";                                                 // 这里要补充空格“ ”  
        cmd.CommandText += "WHERE CLASS_INFO.studentid = '" + paraStudent_Datas.sStudent_ID + "' AND CLASS_INFO.semesterid = '" +sSemester+ "' AND CLASS_INFO.courseid = COURSE_INFO.id";
        cmd.Connection = conn;

        conn.Open();

        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        if (false == reader.Read())                                             // 不存在
        {
            // 提示错误信息
            return false;
        }

        //
        // 测试Select语句返回的值是否正确
        // (这里1.不能确定能否检测所得结果为0；2.不能处理挂科无学分情况)
        //
        if (true == reader.IsDBNull(0))                                         // 该值指示列中是否包含不存在的或已丢失的值
        {
            return false;
        }

        int nCredits_Semester       = Convert.ToInt32(reader.GetValue(0));                      // 得到学分之和
        int nGradeCredits_Semester  = Convert.ToInt32(reader.GetValue(1));                 // 得到学分绩之和

        conn.Close();

        paraStudent_Datas.nCredits_Semester = nCredits_Semester;                // 学分之和
        paraStudent_Datas.nGradeCredits_Average_Semester = (nGradeCredits_Semester)/(nCredits_Semester);   // 平均学分绩

        return true;
    }

}
